package paginas;

import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.GridLayout;
import java.awt.Image;
import java.awt.Insets;
import java.awt.Toolkit;
import java.awt.event.KeyEvent;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.ResourceBundle;
import java.util.Vector;

import javax.swing.DefaultListModel;
import javax.swing.ImageIcon;
import javax.swing.JComboBox;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextField;
import javax.swing.ListSelectionModel;
import javax.swing.SwingConstants;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;

import modelUtil.Util;
import multimedia.MultimediaTO;
import multimedia.XMLMultimediaDAO;
import AccionBoton.AccionBuscar;
import AccionBoton.AccionCerrar;
import AccionBoton.AccionFocoCreditos;
import AccionBoton.AccionLanzarAyuda;

import util.BotonPersonalizado;
import util.TransicionBotones;

public class BibliotecaImagenes extends JPanel implements ListSelectionListener{

	private static final long serialVersionUID = 1L;
	
	private JPanel izq;
	private JPanel drcha;
	private JPanel abajo;
	private JPanel panelPrincipal;
	private String imagenSeleccionada = "lib//Resources//Vistaprevia.png";
	
	List<String> teclados;
    private JList list;
    private DefaultListModel listModel;
    private DefaultListModel listModel2;
    private BotonPersonalizado boton1;
    private BotonPersonalizado boton2;
	private TransicionBotones policy;
	private JScrollPane pane;
	private Vector<Component> order;
	private JDialog _padre;
	private JFrame _abuelo;
	private Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
	private List<String> listaPalabrasClave = new ArrayList<String>();
	private String _categoriaSeleccionada = "";
	JComboBox desplegable = new JComboBox();


public BibliotecaImagenes(JDialog padre, JFrame abuelo){
		
		_padre = padre;
		_abuelo = abuelo;
		initComponents();
        order = new Vector<Component>(14);
        
        order.add(list);
        order.add(boton1);
        order.add(boton2);

        this.setFocusable(true);
        policy = new TransicionBotones(order);
        setFocusTraversalPolicy(policy);
		setBounds(0, 0, (int) Math.floor(screenSize.getWidth()*0.6), (int) Math.floor(screenSize.getHeight()*0.6));
		setVisible(true);
		
	}
	
	//Inicializa los componentes del panel
	public void initComponents(){
		
		limpiar();
		
		izq = new JPanel();
		drcha = new JPanel();
		abajo = new JPanel();
		panelPrincipal = new JPanel();
		
		panelIzq();
		panelDrcha();
		panelAbajo();
		
		GridBagLayout grid = new GridBagLayout();
		GridBagConstraints cons = new GridBagConstraints();
		GridLayout g = new GridLayout(1, 2);
		panelPrincipal.setLayout(g);
		g.addLayoutComponent("izq", izq);
		panelPrincipal.add(izq);
		g.addLayoutComponent("drcha", drcha);
		panelPrincipal.add(drcha);
		
		cons.gridheight = 1;
		cons.gridwidth = 1;
		cons.gridx = 0;
		cons.gridy =0;
		grid.addLayoutComponent(panelPrincipal, cons);
		add(panelPrincipal);

		cons.gridx = 0;
		cons.gridy = 1;
		cons.gridwidth = 2;
		grid.addLayoutComponent(abajo, cons);
		add(abajo);
		
		this.setLayout(grid);
		
		setPreferredSize(new Dimension((int) Math.floor(screenSize.getWidth()*0.55), (int) Math.floor(screenSize.getHeight()*0.55)));
	}
	

	public void panelIzq(){
		
		izq.setPreferredSize(new Dimension((int) Math.floor(screenSize.getWidth()*0.3), (int) Math.floor(screenSize.getHeight()*0.5)));

		GridBagLayout grid = new GridBagLayout();
		GridBagConstraints cons = new GridBagConstraints();

		
		//PALABRAS CLAVE (textField)
		
		JPanel cuadroTextFieldBoton = new JPanel();
		
		GridBagLayout gridTextField = new GridBagLayout();
		GridBagConstraints consTextField = new GridBagConstraints();
		
		JLabel etiquetaPalabrasClave = new JLabel(ResourceBundle.getBundle("internacionalizacion/Etiquetas").getString("etiqueta_pagina_biblioteca_multimedia_seleccionar_categoria"));
		etiquetaPalabrasClave.setFont(new Font("Verdana", Font.BOLD,12));
		cuadroTextFieldBoton.add(etiquetaPalabrasClave);
		
		consTextField.gridx = 0;
		consTextField.gridy = 0;
		consTextField.gridwidth = 1;
		consTextField.gridheight = 1;
		consTextField.anchor = GridBagConstraints.LINE_END;
		consTextField.insets = new Insets(0,0,0,0);
		gridTextField.addLayoutComponent(etiquetaPalabrasClave, cons);
		
		//PALABRAS CLAVE (textfield)
		
		JTextField palabrasClaveField = new JTextField();
		palabrasClaveField.setColumns(20);
		palabrasClaveField.addActionListener(new AccionBuscar(palabrasClaveField, this, "imagenes"));
		cuadroTextFieldBoton.add(palabrasClaveField);
		
		consTextField.gridx = 1;
		consTextField.gridy = 1;
		consTextField.gridwidth = 1;
		consTextField.gridheight = 1;
		consTextField.anchor = GridBagConstraints.LINE_START;
		consTextField.insets = new Insets(0,0,0,50);
		gridTextField.addLayoutComponent(palabrasClaveField, cons);
		
		izq.add(cuadroTextFieldBoton);
		
		cons.gridx = 0;
		cons.gridy =0;
		cons.ipady = 0;
		cons.gridwidth = 2;
		cons.gridheight = 1;
		cons.anchor = GridBagConstraints.CENTER;
		grid.addLayoutComponent(cuadroTextFieldBoton, cons);
		
		
		//DESPLEGABLE (texto)
		
		JPanel cuadroDesplegable = new JPanel();
		
		GridBagLayout g = new GridBagLayout();
		GridBagConstraints c = new GridBagConstraints();
		
		JLabel frase = new JLabel(ResourceBundle.getBundle("internacionalizacion/Etiquetas").getString("etiqueta_pagina_biblioteca_multimedia_seleccionar_categoria"));
		frase.setFont(new Font("Verdana", Font.BOLD,12));
		cuadroDesplegable.add(frase);
		
		c.gridx = 0;
		c.gridy = 0;
		c.gridwidth = 1;
		c.gridheight = 1;
		c.anchor = GridBagConstraints.LINE_END;
		c.insets = new Insets(0,0,0,50);
		g.addLayoutComponent(frase, cons);
		
		//DESPLEGABLE (combo)
		
		desplegable.getAccessibleContext().setAccessibleName(ResourceBundle.getBundle("internacionalizacion/Etiquetas").getString("etiqueta_pagina_biblioteca_multimedia_seleccionar_categoria"));
		desplegable.setToolTipText(ResourceBundle.getBundle("internacionalizacion/Etiquetas").getString("etiqueta_accesible_desplegable_barrido_tiempo"));
		desplegable.setFocusable(true);
		desplegable.setPreferredSize(new Dimension(300,30));
		desplegable.addItem(ResourceBundle.getBundle("internacionalizacion/Etiquetas").getString("etiqueta_pagina_biblioteca_multimedia_categorias_todas"));
		desplegable.addItem(ResourceBundle.getBundle("internacionalizacion/Etiquetas").getString("etiqueta_pagina_biblioteca_multimedia_categorias_basicasvidadiaria"));
		desplegable.addItem(ResourceBundle.getBundle("internacionalizacion/Etiquetas").getString("etiqueta_pagina_biblioteca_multimedia_categorias_instrumentalesvidadiaria"));
		desplegable.addItem(ResourceBundle.getBundle("internacionalizacion/Etiquetas").getString("etiqueta_pagina_biblioteca_multimedia_categorias_educacion"));
		desplegable.addItem(ResourceBundle.getBundle("internacionalizacion/Etiquetas").getString("etiqueta_pagina_biblioteca_multimedia_categorias_trabajo"));
		desplegable.addItem(ResourceBundle.getBundle("internacionalizacion/Etiquetas").getString("etiqueta_pagina_biblioteca_multimedia_categorias_ocio"));
		desplegable.addItem(ResourceBundle.getBundle("internacionalizacion/Etiquetas").getString("etiqueta_pagina_biblioteca_multimedia_categorias_juego"));
		desplegable.addItem(ResourceBundle.getBundle("internacionalizacion/Etiquetas").getString("etiqueta_pagina_biblioteca_multimedia_categorias_participacionsocial"));
		desplegable.addItem(ResourceBundle.getBundle("internacionalizacion/Etiquetas").getString("etiqueta_pagina_biblioteca_multimedia_categorias_acciones"));
		desplegable.addItem(ResourceBundle.getBundle("internacionalizacion/Etiquetas").getString("etiqueta_pagina_biblioteca_multimedia_categorias_acontecimientos"));
		desplegable.addItem(ResourceBundle.getBundle("internacionalizacion/Etiquetas").getString("etiqueta_pagina_biblioteca_multimedia_categorias_animales"));
		desplegable.addItem(ResourceBundle.getBundle("internacionalizacion/Etiquetas").getString("etiqueta_pagina_biblioteca_multimedia_categorias_casa"));
		desplegable.addItem(ResourceBundle.getBundle("internacionalizacion/Etiquetas").getString("etiqueta_pagina_biblioteca_multimedia_categorias_colores"));
		desplegable.addItem(ResourceBundle.getBundle("internacionalizacion/Etiquetas").getString("etiqueta_pagina_biblioteca_multimedia_categorias_comunicacion"));
		desplegable.addItem(ResourceBundle.getBundle("internacionalizacion/Etiquetas").getString("etiqueta_pagina_biblioteca_multimedia_categorias_cuerpohumano"));
		desplegable.addItem(ResourceBundle.getBundle("internacionalizacion/Etiquetas").getString("etiqueta_pagina_biblioteca_multimedia_categorias_deportes"));
		desplegable.addItem(ResourceBundle.getBundle("internacionalizacion/Etiquetas").getString("etiqueta_pagina_biblioteca_multimedia_categorias_dinero"));
		desplegable.addItem(ResourceBundle.getBundle("internacionalizacion/Etiquetas").getString("etiqueta_pagina_biblioteca_multimedia_categorias_discapacidad"));
		desplegable.addItem(ResourceBundle.getBundle("internacionalizacion/Etiquetas").getString("etiqueta_pagina_biblioteca_multimedia_categorias_emociones"));
		desplegable.addItem(ResourceBundle.getBundle("internacionalizacion/Etiquetas").getString("etiqueta_pagina_biblioteca_multimedia_categorias_entorno"));
		desplegable.addItem(ResourceBundle.getBundle("internacionalizacion/Etiquetas").getString("etiqueta_pagina_biblioteca_multimedia_categorias_formas"));
		desplegable.addItem(ResourceBundle.getBundle("internacionalizacion/Etiquetas").getString("etiqueta_pagina_biblioteca_multimedia_categorias_letras"));
		desplegable.addItem(ResourceBundle.getBundle("internacionalizacion/Etiquetas").getString("etiqueta_pagina_biblioteca_multimedia_categorias_lugares"));
		desplegable.addItem(ResourceBundle.getBundle("internacionalizacion/Etiquetas").getString("etiqueta_pagina_biblioteca_multimedia_categorias_materiales"));
		desplegable.addItem(ResourceBundle.getBundle("internacionalizacion/Etiquetas").getString("etiqueta_pagina_biblioteca_multimedia_categorias_musica"));

		
		cuadroDesplegable.add(desplegable);
		
		c.gridx = 1;
		c.gridy =1;
		c.anchor = GridBagConstraints.LINE_START;
		g.addLayoutComponent(desplegable, cons);
		
		izq.add(cuadroDesplegable);
		
		cons.gridx = 0;
		cons.gridy =1;
		cons.ipady = 0;
		cons.gridwidth = 2;
		cons.gridheight = 1;
		cons.insets = new Insets(50,0,0,0);
		cons.anchor = GridBagConstraints.CENTER;
		grid.addLayoutComponent(cuadroDesplegable, cons);
		
		
		//LISTA DE IMAGENES (etiqueta)
		
		JLabel etiquetaResultado = new JLabel(ResourceBundle.getBundle("internacionalizacion/Etiquetas").getString("etiqueta_pagina_biblioteca_multimedia_titulo_imagenes"));
    	etiquetaResultado.setFont(new Font("Verdana", Font.BOLD,16));
    	izq.add(etiquetaResultado);
    	
		cons.gridx = 0;
		cons.gridy =2;
		cons.gridwidth = 2;
		cons.gridheight = 1;
		cons.insets = new Insets(50,0,0,0);
		cons.anchor = GridBagConstraints.CENTER;
		grid.addLayoutComponent(etiquetaResultado, cons);
		
		//LISTA DE IMAGENES (lista)
		
		JPanel panelLista = new JPanel();
        listModel = new DefaultListModel();
		List<MultimediaTO> lista = new XMLMultimediaDAO().buscarMultimedia("", "imagen");
		Iterator<MultimediaTO> iterador = lista.iterator();
		
		String imagen, palabraClave;
		MultimediaTO objeto;
		while(iterador.hasNext()){
			objeto = iterador.next();
			imagen = objeto.getPath().toLowerCase();
			
			boolean incluir;
			
			incluir = (listaPalabrasClave.isEmpty());
			
			for(int i=0; i< listaPalabrasClave.size(); i++){
				palabraClave = listaPalabrasClave.get(i).toLowerCase();
				
				if(imagen.contains(palabraClave)){
					if(!_categoriaSeleccionada.equalsIgnoreCase(ResourceBundle.getBundle("internacionalizacion/Etiquetas").getString("etiqueta_pagina_biblioteca_multimedia_categorias_todas"))){
						if(objeto.getCategoria().equalsIgnoreCase(_categoriaSeleccionada)){
							incluir = true;
						}
					}
				}
			}
			
			if(incluir) listModel.addElement(imagen);
		}

        list = new JList(listModel);
        list.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
        list.addListSelectionListener(this);
        list.setVisibleRowCount(5);
       
    	pane = new JScrollPane(list);
    	pane.setVisible(true);
		pane.setPreferredSize(new Dimension((int) Math.floor(screenSize.getWidth()*0.15), (int) Math.floor(screenSize.getHeight()*0.15)));
		list.getAccessibleContext().setAccessibleName(ResourceBundle.getBundle("internacionalizacion/Etiquetas").getString("etiqueta_accesible_lista_imagenes"));
		list.setToolTipText(ResourceBundle.getBundle("internacionalizacion/Etiquetas").getString("etiqueta_accesible_lista_imagenes"));
		
		panelLista.add(pane);
		izq.add(panelLista);
		
		cons.gridx = 0;
		cons.gridy = 3;
		cons.gridwidth = 2;
		cons.gridheight = 4;
		cons.insets = new Insets(0,0,0,0);
		cons.anchor = GridBagConstraints.CENTER;
		grid.addLayoutComponent(panelLista, cons);
	
		
		
		
		
		
		
		
		BotonPersonalizado botonBuscar;
		botonBuscar = Util.BotonImagen(ResourceBundle.getBundle("internacionalizacion/Etiquetas").getString("etiqueta_popup_admin_buscar"),"lib//Resources//buscar.png");
		botonBuscar.addActionListener(new AccionBuscar(palabrasClaveField, this, "imagenes"));
		cuadroTextFieldBoton.add(botonBuscar);
		
		consTextField.gridx = 1;
		consTextField.gridy =1;
		consTextField.anchor = GridBagConstraints.LINE_START;
		gridTextField.addLayoutComponent(botonBuscar, cons);
		
		
		
		
		
		
		

		izq.setLayout(grid);		
	}
	
	public void panelDrcha(){
			
			drcha.setPreferredSize(new Dimension((int) Math.floor(screenSize.width*0.3), (int) Math.floor(screenSize.height*0.5)));
			ImageIcon Logo = new ImageIcon(imagenSeleccionada);
			int anchoLogo = Logo.getIconWidth();
			int altologo = Logo.getIconHeight();
       	 	double factorEscala = (double) (altologo/(double)(screenSize.getHeight()/3));
       	 	Image scala = Logo.getImage().getScaledInstance((int) Math.floor((float)(anchoLogo/factorEscala)), (int)(screenSize.getHeight()/3), Image.SCALE_DEFAULT);
       	 	Logo = new ImageIcon(scala);
       	 	JLabel et = new JLabel();
       	 	et.setIcon(Logo);
       	 	drcha.add(et);
       	 	drcha.setVisible(true);
	}
	
	public void panelAbajo(){
		
		boton1 = Util.BotonImagen(ResourceBundle.getBundle("internacionalizacion/Etiquetas").getString("etiqueta_popup_admin_ayuda"),"lib//Resources//Ayuda.png");
		boton2 = Util.BotonImagen(ResourceBundle.getBundle("internacionalizacion/Etiquetas").getString("etiqueta_pagina_entorno_creacion_salir"), "lib//Resources//Salir.jpg");
		boton1.addActionListener(new AccionLanzarAyuda(_abuelo));
		boton2.addActionListener(new AccionCerrar(_padre,_abuelo));
		boton1.setFocusable(true);
		boton2.setFocusable(true);

		boton1.addFocusListener(new AccionFocoCreditos(boton1));
		boton2.addFocusListener(new AccionFocoCreditos(boton2));
		boton1.setMnemonic(KeyEvent.VK_Y);
		boton1.getLabelTexto().setDisplayedMnemonic(KeyEvent.VK_Y);
		boton2.setMnemonic(KeyEvent.VK_S);
		boton2.getLabelTexto().setDisplayedMnemonic(KeyEvent.VK_S);
		
		boton1.getLabelTexto().setFont(boton1.getFont().deriveFont(Font.BOLD,16));
		boton2.getLabelTexto().setFont(boton1.getFont().deriveFont(Font.BOLD,16));

		
		boton1.getLabelImagen().setHorizontalAlignment(SwingConstants.LEFT);
		boton2.getLabelImagen().setHorizontalAlignment(SwingConstants.LEFT);

		boton1.getLabelTexto().setHorizontalAlignment(SwingConstants.RIGHT);
		boton2.getLabelTexto().setHorizontalAlignment(SwingConstants.RIGHT);

		boton1.setPreferredSize(new Dimension(150,50));
		boton2.setPreferredSize(new Dimension(150,50));

		
		boton1.setBackground(Color.lightGray);
		boton2.setBackground(Color.lightGray);

		
		abajo.add(boton1);
		abajo.add(boton2);
		
		
	}
	
	
    public void valueChanged(ListSelectionEvent e) {
        if (e.getValueIsAdjusting() == false) {

            if (list.getSelectedIndex() == -1) {} 
            else{
            	imagenSeleccionada = list.getSelectedValue().toString();	
            	imagenSeleccionada = "lib//imagenes//" + imagenSeleccionada;
            	System.out.println(imagenSeleccionada);
            }
            
            initComponents();
            drcha.setVisible(true);
            getPadre().repaint();
            getPadre().pack();
        }
    }
    
    
    public void limpiar(){
    	if(panelPrincipal!=null) remove(panelPrincipal);
		if(izq!=null) remove(izq);
		if(drcha!=null) remove(drcha);
		if(abajo!=null) remove(abajo);
    }


	public String getImagenSeleccionada() {
		return imagenSeleccionada;
	}


	public void setImagenSeleccionada(String imagenSeleccionada) {
		this.imagenSeleccionada = imagenSeleccionada;
	}


	public JList getList() {
		return list;
	}


	public void setList(JList list) {
		this.list = list;
	}

	public DefaultListModel getListModel() {
		return listModel;
	}

	public void setListModel(DefaultListModel listModel) {
		this.listModel = listModel;
	}

	public DefaultListModel getListModel2() {
		return listModel2;
	}

	public void setListModel2(DefaultListModel listModel2) {
		this.listModel2 = listModel2;
	}

	public TransicionBotones getPolicy() {
		return policy;
	}

	public void setPolicy(TransicionBotones policy) {
		this.policy = policy;
	}
    
	public void requestFocus(){
		this.setFocusTraversalPolicy(policy);
		super.requestFocus();
	}

	public List<String> getListaPalabrasClave() {
		return listaPalabrasClave;
	}

	public void setListaPalabrasClave(List<String> listaPalabrasClave) {
		this.listaPalabrasClave = listaPalabrasClave;
	}
	

	public void obtenerCategoriaSeleccionada() {
		_categoriaSeleccionada = desplegable.getSelectedItem().toString();
		System.out.println("Categoria = " + _categoriaSeleccionada);
	}

	public JDialog getPadre(){
		return _padre;
	}
	
	
}
